/**
 * 表单验证
 * 示例：{ validator: this.$validator.checkChinese, message: this.$validator.checkChinese('message'), trigger: 'blur' }
 * */
import api from '../api'
export const validator = {
  /**
   * 正则匹配移动电话号码
   * @param {string} type 返回的类型是提示文字还是结果，默认是结果
   * @param {any} value 需要检测的值
   * @param {function} callback 默认回调，返回error则校验失败
   * @returns
   */
  checkPhoneNumber: (type, value, callback) => {
    if (type === 'message') {
      return '请输入正确手机号!'
    }
    if (value) {
      let moblieRule = new RegExp(/^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/, 'g')
      if (moblieRule.test(value)) {
        callback()
      } else {
        callback(new Error())
      }
    } else {
      callback()
    }
  },
  /**
   * 密码复杂度检测
   * @param {string} type 返回的类型是提示文字还是结果，默认是结果
   * @param {any} value 需要检测的值
   * @param {function} callback 默认回调，返回error则校验失败
   * 说明：检测用户密码
   */
  checkPassword: (type, value, callback) => {
    if (type === 'message') {
      return '密码格式不对，格式为数字加字母加字符的组合'
    }
    if (value) {
      let reg = /^[^\u4e00-\u9fa5]{0,}$/
      if (!reg.test(value)) {
        callback(new Error())
      } else {
        /* eslint-disable */
        const reg1 = new RegExp(/^[0-9a-zA-Z\u0022\u0027\u201c\u201d~!@；#$%^‘&*。()_+{}【】，·|:<>?`,./;\\！￥…（）—：\-、《》？=\[\]]*$/, 'g')
        if (!reg1.test((value))) {
          callback(new Error())
        } else {
          /* eslint-disable */
          const rule = new RegExp(/^(?=.*[a-zA-Z])(?=.*\d)(?=.*[~!@；#$%^‘&*。()_+{}【】，·|:<>?`,./;\\！￥…（）—：\-、《》？=\[\]]).{8,16}$/)
          let result = rule.test(value)
          if (result) {
            callback()
          } else {
            callback(new Error())
          }
        }
      }
    } else {
      callback(new Error())
    }
  },
  /**
   * 校验键盘上可录入所有字符，中英文数字
   **/
  checkNumChEnCharacter (type, value, callback) {
    if (type === 'message') {
      return '输入值格式不正确'
    }
    /* eslint-disable */
    const reg = new RegExp(/^[0-9a-zA-Z\u4e00-\u9fa5\u0022\u0027\u201c\u201d~!@；#$%^‘&*。()_+{}【】，·|:<>?`,./;\\！￥…（）—：\-、《》？=\[\]]*$/, 'g')
    if (value) {
      if (reg.test(value)) {
        callback()
      } else {
        callback(new Error())
      }
    } else {
      callback()
    }
  },
  /**
   * 输入字符为1-10个字符
   **/
  checkNameLength (type, value, callback) {
    if (type === 'message') {
      return '最多不能超过10个字符'
    }
    if (value) {
      if (value.length > 10) {
        callback(new Error())
      } else {
        callback()
      }
    } else {
      callback()
    }
  },
  /**
   * 用户名重复
   * */
  checkUserName: async (rule, value, callback) => {
    if (value) {
      let { data } = await api.checkUserName({id: rule, name: value})
      if (data) {
        callback()
      } else {
        callback(new Error())
      }
    } else {
      callback()
    }
  },
  /**
   * 检验验证码是否正确
   * */
  checkImgCode: (value, text, callback) =>{
    console.log('value', value)
    console.log('text', text)
    if (value.toLowerCase() === text.toLowerCase()) {
      console.log('成功')
      callback()
    } else {
      console.log('不相等')
      callback(new Error())
    }
  },
  /**
   * 用户组名称重复
   * */
  checkGroupName: async (rule, value, callback) => {
    if (value) {
      let { data } = await api.getUserGroupCheck({id: rule, name: value})
      if (data) {
        callback()
      } else {
        callback(new Error())
      }
    } else {
      callback()
    }
  },
  /**
   * 角色名存在
   * */
  checkRoleName: async (rule, value, callback) => {
    if (value) {
      let Obj = {
        id: rule,
        name: value
      }
      let { data } = await api.checkRoleNames(Obj)
      if (data) {
        callback()
      } else {
        callback(new Error())
      }
    } else {
      callback()
    }
  },
 /**
  * 两次输入密码应该一致
  * */
 changePsd(value, text, callback) {
   if (value !== text) {
     callback(new Error())
   } else {
     callback()
   }
 },
  /**
   * 检验手机号是否存在
   * */
  checkPhone: async (rule, value, callback) => {
    if (value) {
      const params = {
        id: rule,
        mobile: value
      }
      let {data} = await api.checkMobile(params)
      if (data) {
        callback()
      } else {
        callback(new Error())
      }
    } else {
      callback()
    }
  },
  /**
   * 备注上限为两百个字符
   * */
  checkRemarkLength (type, value, callback) {
    if (type === 'message') {
      return '最多不能超过128个字符'
    }
    if (value) {
      if (value.length > 128) {
        callback(new Error())
      } else {
        callback()
      }
    } else {
      callback()
    }
  },
  /***
   *
   * 只能输入字母
   * */
  checkLetter (type, value, callback) {
    if (value) {
      let inputRule = new RegExp(/^[A-Za-z]+$/, '')
      if (inputRule.test(value)) {
        callback()
      } else {
        callback(new Error())
      }
    } else {
      callback()
    }
  },
  /***
   *
   * 检验十六进制
   * */
  checkNumberVal (type, value, callback) {
    if (value) {
      let inputRule = new RegExp(/^[A-fa-f0-9]{1,4}$/, '')
      if (inputRule.test(value)) {
        callback()
      } else {
        callback(new Error())
      }
    } else {
      callback()
    }
  },
  /**
   * 检验不能输入中文
   * */
  checkCode(type, value, callback) {
    if (value) {
      let inputRule = new RegExp(/^[\u4E00-\u9FA5]/g, '')
      if (inputRule.test(value)) {
        callback(new Error())

      } else {
        callback()
      }
    } else {
      callback()
    }
    }
}
